package com.study.lihan.letcode;

import com.study.lihan.letcode.util.Util;

import java.util.HashMap;
import java.util.Map;

/*1. 两数之和
https://leetcode-cn.com/problems/two-sum/

给定一个整数数组 nums 和一个目标值 target，请你在该数组中找出和为目标值的那 两个 整数，并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是，数组中同一个元素不能使用两遍。

注：需要先从map里面取对应的otherIndex，如果先放入map的话，下面这种情况会取出自身
* */
public class My1 {
    static  int[] nums = {3,3};
    static  int target = 6;
    public static void main(String[] args) {
     int[] result = mytwoSum(nums,target);
        Util.printArr(result);
    }

    public static int[] mytwoSum(int[] nums, int target) {
      int[] result = new int[2];
      int arrLen = nums.length;
      Map<Integer,Integer> index4Key = new HashMap<>(arrLen);
      for(int i=0; i<arrLen; i++){
          int temp = nums[i];
          int otherVal = target-temp;
          if(index4Key.get(otherVal)!=null){
              int otherIndex = index4Key.get(otherVal);
              result[0]=otherIndex;
              result[1]= i;
              return result;
          }
          index4Key.put(temp,i);
      }
      return result;
    }


    public int[] twoSum(int[] nums, int target) {
        int[] res = new int[2];
        if(nums == null || nums.length == 0){
            return res;
        }
        Map<Integer, Integer> map = new HashMap<>();
        for(int i = 0; i < nums.length; i++){
            int temp = target - nums[i];
            if(map.containsKey(temp)){
                res[1] = i;
                res[0] = map.get(temp);
            }
            map.put(nums[i], i);
        }
        return res;
    }
}

